package com.yami.shop.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yami.shop.bean.dto.RecommendDTO;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * @author DELL
 */
@Mapper
public interface RecommendMapper extends BaseMapper<RecommendDTO> {

    /**
     * 获取个性化推荐列表
     *
     * @param userId 用户唯一标识符，用于获取用户偏好特征
     * @param limit 最大返回推荐结果数量
     * @return 推荐结果集合，包含商品ID和综合评分信息
     *
     * @implNote 通过用户特征偏好分析结合热门商品数据，
     *           使用CTE计算个性化推荐得分（偏好得分与热门得分的加权综合）
     */
    @Select(
            "WITH user_preference AS (...原SQL部分...)" +
                    "SELECT ..."  // 保持之前完整的SQL语句
    )
    // 结果集映射配置：将SQL查询结果字段与DTO属性进行映射
    @Results({
            // 将数据库recommend_id字段映射到DTO的prodId属性
            @Result(column = "recommend_id", property = "prodId"),
            // 将计算得出的final_score字段映射到DTO的score属性
            @Result(column = "final_score", property = "score")
    })
    List<RecommendDTO> selectRecommendList(@Param("userId") String userId, @Param("limit") int limit);
}
